const fs = require('fs');
const path = require('path');
const sharp = require('sharp');
const ico = require('png-to-ico');

// 简化配置 - 只生成必要的文件
const config = {
  // 主图标 SVG
  inputSvg: path.join(__dirname, '../resources/logo.svg'),
  // 托盘图标 SVG
  traySvg: path.join(__dirname, '../resources/tray-icon.svg'),
  outputDir: path.join(__dirname, '../resources'),
  // 标准尺寸
  standardSize: 256, // PNG 文件尺寸
  // ICO 文件支持的尺寸
  icoSizes: [16, 32, 48, 256]
};

async function generateIcons() {
  console.log('🎨 开始生成 JOY Logo 图标...');

  // 确保输出目录存在
  if (!fs.existsSync(config.outputDir)) {
    fs.mkdirSync(config.outputDir, { recursive: true });
  }

  // 检查 SVG 文件
  if (!fs.existsSync(config.inputSvg)) {
    console.error(`❌ 主 SVG 文件不存在: ${config.inputSvg}`);
    return;
  }

  if (!fs.existsSync(config.traySvg)) {
    console.error(`❌ 托盘 SVG 文件不存在: ${config.traySvg}`);
    return;
  }

  // 生成应用图标
  await generateAppIcon();

  // 生成托盘图标
  await generateTrayIcon();

  console.log('✅ 图标生成完成!');
  console.log('\n📁 生成的文件:');
  console.log('   - logo.ico (Windows 应用图标)');
  console.log('   - logo.png (通用应用图标)');
  console.log('   - tray-icon.ico (Windows 托盘图标)');
  console.log('   - tray-icon.png (通用托盘图标)');
}

async function generateAppIcon() {
  console.log('\n🔧 生成应用图标...');

  const svgBuffer = fs.readFileSync(config.inputSvg);

  // 生成主 PNG 文件
  console.log(`   📱 生成 logo.png (${config.standardSize}x${config.standardSize})...`);
  const mainPngBuffer = await sharp(svgBuffer)
    .resize(config.standardSize, config.standardSize, {
      kernel: sharp.kernel.lanczos3,
      fit: 'contain',
      background: { r: 0, g: 0, b: 0, alpha: 0 }
    })
    .png({ quality: 100 })
    .toBuffer();

  fs.writeFileSync(path.join(config.outputDir, 'logo.png'), mainPngBuffer);

  // 生成 ICO 文件用的不同尺寸 PNG
  console.log('   🪟 生成 logo.ico...');
  const pngBuffers = [];

  for (const size of config.icoSizes) {
    const pngBuffer = await sharp(svgBuffer)
      .resize(size, size, {
        kernel: sharp.kernel.lanczos3,
        fit: 'contain',
        background: { r: 0, g: 0, b: 0, alpha: 0 }
      })
      .png({ quality: 100 })
      .toBuffer();

    pngBuffers.push(pngBuffer);
  }

  const icoBuffer = await ico(pngBuffers);
  fs.writeFileSync(path.join(config.outputDir, 'logo.ico'), icoBuffer);
}

async function generateTrayIcon() {
  console.log('\n🔧 生成托盘图标...');

  const svgBuffer = fs.readFileSync(config.traySvg);

  // 生成主 PNG 文件
  console.log(`   📍 生成 tray-icon.png (${config.standardSize}x${config.standardSize})...`);
  const mainPngBuffer = await sharp(svgBuffer)
    .resize(config.standardSize, config.standardSize, {
      kernel: sharp.kernel.lanczos3,
      fit: 'contain',
      background: { r: 0, g: 0, b: 0, alpha: 0 }
    })
    .png({ quality: 100 })
    .toBuffer();

  fs.writeFileSync(path.join(config.outputDir, 'tray-icon.png'), mainPngBuffer);

  // 生成 ICO 文件用的不同尺寸 PNG (托盘图标通常较小)
  console.log('   🪟 生成 tray-icon.ico...');
  const pngBuffers = [];
  const trayIcoSizes = [16, 32, 48]; // 托盘图标常用尺寸

  for (const size of trayIcoSizes) {
    const pngBuffer = await sharp(svgBuffer)
      .resize(size, size, {
        kernel: sharp.kernel.lanczos3,
        fit: 'contain',
        background: { r: 0, g: 0, b: 0, alpha: 0 }
      })
      .png({ quality: 100 })
      .toBuffer();

    pngBuffers.push(pngBuffer);
  }

  const icoBuffer = await ico(pngBuffers);
  fs.writeFileSync(path.join(config.outputDir, 'tray-icon.ico'), icoBuffer);
}

// 如果直接运行此脚本
if (require.main === module) {
  generateIcons().catch(console.error);
}

module.exports = { generateIcons };
